/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.designless.business.facade;

import br.com.designless.business.component.EmailComponentLocal;
import br.com.designless.business.component.JogoComponentLocal;
import br.com.designless.business.component.UsuarioComponentLocal;
import br.com.designless.business.model.Jogos;
import br.com.designless.business.model.Locais;
import br.com.designless.business.model.TiposUsuario;
import br.com.designless.business.model.Usuarios;
import br.com.designless.exception.UsuarioExistenteException;
import br.com.designless.exception.UsuarioNaoEncontradoException;
import br.com.designless.util.Constantes;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author diogenes.feijo
 */
@Stateless(name=FutibaManagerFacadeRemote.JNDI_NAME)
public class FutibaManagerFacadeBean implements FutibaManagerFacadeRemote {
    
    @EJB
    private UsuarioComponentLocal usuarioComponent;

    @EJB
    private EmailComponentLocal emailComponent;

    @EJB
    private JogoComponentLocal jogoComponent;
 
    public Usuarios cadastrarUsuario(Usuarios usuario) throws UsuarioExistenteException {
        usuario = usuarioComponent.cadastrarUsuario(usuario);
        
        enviarEmailCadastroUsuario(usuario);

        return usuario;
    }

    public TiposUsuario cadastrarTipoUsuario(TiposUsuario tipoUsuario) {
        return usuarioComponent.cadastrarTipoUsuario(tipoUsuario);
    }

    public Usuarios buscarUsuario(String login, String senha)  throws UsuarioNaoEncontradoException {
        return usuarioComponent.buscarUsuario(login, senha);
    }

    public Usuarios buscarUsuario(String login)  throws UsuarioNaoEncontradoException {
        return usuarioComponent.buscarUsuario(login);
    }

    public List<Usuarios> buscarUsuarios() {
        return usuarioComponent.buscarUsuarios();
    }

    public void enviarEmailCadastroUsuario(Usuarios usuario) {
        emailComponent.enviarEmailCadastroUsuario(usuario);
    }
    public void enviarEmailConfirmacaoParticipacaoJogo(Usuarios usuario, Jogos jogo) {
        emailComponent.enviarEmailConfirmacaoParticipacaoJogo(usuario, jogo);
    }

    public void enviarEmailConviteParticipacaoJogo(String[] emailsConvidados, Jogos jogo) {
        emailComponent.enviarEmailConviteParticipacaoJogo(emailsConvidados, jogo);
    }

    public void recuperarDadosCadastraisUsuario(String email) throws UsuarioNaoEncontradoException {
        Usuarios usuario = usuarioComponent.buscarUsuarioPorEmail(email);
        
        emailComponent.enviarEmailRecuperacaoCadastroUsuario(usuario);
    }

    public Jogos cadastrarJogo(Jogos jogo) {
        return jogoComponent.cadastrarJogo(jogo);
    }

    public void excluirJogo(Jogos jogo) {
        jogoComponent.excluirJogo(jogo);
    }

    public List<Jogos> buscarJogos() {
        return jogoComponent.buscarJogos();
    }

    public List<Jogos> buscarJogosAtuais() {
        return jogoComponent.buscarJogos(Constantes.TIPO_JOGO_ATUAL);
    }

    public List<Jogos> buscarJogosHistorico() {
        return jogoComponent.buscarJogos(Constantes.TIPO_JOGO_HISTORICO);
    }

    public Jogos buscarJogo(Integer id) {
        return jogoComponent.buscarJogo(id);
    }

    public Locais cadastrarLocal(Locais local) {
        return jogoComponent.cadastrarLocal(local);
    }

    public void excluirLocal(Locais local) {
        jogoComponent.excluirLocal(local);
    }

    public List<Locais> buscarLocais() {
        return jogoComponent.buscarLocais();
    }

    public Locais buscarLocal(Integer id) {
        return jogoComponent.buscarLocal(id);
    }
 
}